package com.useeinfo.oa.modules.wuHanCommon.base.result;

import com.useeinfo.oa.modules.wuHanCommon.base.result.enums.ResultEnums_Wh;

public class ResultUtil_Wh {

    /**
     * 无参成功
     *
     * @param <T>
     * @return
     */
    public static <T> ResultDto_Wh<T> success() {
        return general(ResultEnums_Wh.SUCCESS, null, null);
    }

    /**
     * 自定义成功提示内容
     *
     * @param msg 提示内容
     * @param <T>
     * @return
     */
    public static <T> ResultDto_Wh<T> success(String msg) {
        return general(ResultEnums_Wh.SUCCESS, msg, null);
    }

    /**
     * 成功后返回的就提数据
     *
     * @param data 数据内容
     * @param <T>
     * @return
     */
    public static <T> ResultDto_Wh<T> success(T data) {
        return general(ResultEnums_Wh.SUCCESS, null, data);
    }

    /**
     * 带成功提示的内容返回
     *
     * @param msg  提示
     * @param data 内容
     * @param <T>
     * @return
     */
    public static <T> ResultDto_Wh<T> success(String msg, T data) {
        return general(ResultEnums_Wh.SUCCESS, msg, data);
    }

    /**
     * 无参错误返回
     *
     * @param <T>
     * @return
     */
    public static <T> ResultDto_Wh<T> error() {
        return general(ResultEnums_Wh.FAILURE, null, null);
    }

    /**
     * 带提示的错误
     *
     * @param errorMsg
     * @param <T>
     * @return
     */
    public static <T> ResultDto_Wh<T> error(String errorMsg) {
        return general(ResultEnums_Wh.FAILURE, errorMsg, null);
    }


    /**
     * 带数据提示的错误
     *
     * @param errorMsg
     * @param <T>
     * @return
     */
    public static <T> ResultDto_Wh<T> error(String errorMsg, T data) {
        return general(ResultEnums_Wh.FAILURE, errorMsg, data);
    }

    /**
     * 异常
     *
     * @param <T>
     * @return
     */
    public static <T> ResultDto_Wh<T> exception() {
        return general(ResultEnums_Wh.EXCEPTION, null, null);
    }

    /**
     * 带提示的异常
     *
     * @param exceptionMag
     * @param <T>
     * @return
     */
    public static <T> ResultDto_Wh<T> exception(String exceptionMag) {
        return general(ResultEnums_Wh.EXCEPTION, exceptionMag, null);
    }

    /**
     * 其他通用错误返回，以状态码为准
     *
     * @param resultEnumError 错误枚举
     * @param <T>
     * @return
     */
    public static <T> ResultDto_Wh<T> error(ResultEnums_Wh resultEnumError) {
        return general(resultEnumError, null, null);
    }

    /**
     * 带提示内容的通用错误返回，以状态码为准
     *
     * @param resultEnumError
     * @param errorMsg
     * @param <T>
     * @return
     */
    public static <T> ResultDto_Wh<T> error(ResultEnums_Wh resultEnumError, String errorMsg) {
        return general(resultEnumError, errorMsg, null);
    }

    public static <T> ResultDto_Wh<T> general(ResultEnums_Wh resultEnum, String msg, T data) {
        ResultDto_Wh<T> result = new ResultDto_Wh<T>();
        result.setErr(resultEnum.getCode());
        if (null == msg || msg.isEmpty()) {
            result.setMsg(resultEnum.getDesc());
        } else {
            result.setMsg(msg);
        }
        if (null != data) {
            result.setData(data);
        }
        return result;
    }
}
